package fr.esiag.isidis.epp.repository;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import fr.esiag.isidis.epp.model.SiteModel;
import fr.esiag.isidis.epp.util.Utils;
import au.com.bytecode.opencsv.CSVReader;

@Repository
public class SiteRepository {

	private static Logger logger = Logger.getLogger(CDCAndWeightRepository.class);
	
	@Value("${batch.in.site.file}")
	private String site_pathCsvFile;
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	
	public int loadSite(SiteModel siteItem) {
		int dateBegin = Utils.convertDateToIntSite(siteItem.getBeginDate());
		int dateFin = Utils.convertDateToIntSite(siteItem.getEndDate());
		int result = 0;
		
		Object [] params = {
				siteItem.getId(),
				siteItem.getNaf(),
				dateBegin,
				dateFin
		};
		
		Object [] params2 = {
				siteItem.getNaf(),
				siteItem.getLabel(),
		};
		result  = jdbcTemplate.update(SqlConstants.QUEYR_INSERT_INTO_ACTIVITY, params2);
		result  += jdbcTemplate.update(SqlConstants.QUEYR_INSERT_INTO_SITE, params);
		return result;
	}
	
	public List<SiteModel> site_extractFromCsvFile() throws Exception
	{
		List<SiteModel> retour = new ArrayList<SiteModel>();
		
		//idenfiant new;NAF;Naf Niveau 5;Date de debut des donnees;Fin de donnees;;;;;
		
		// Traitement
		CSVReader reader = new CSVReader(new FileReader(site_pathCsvFile),';');
		// Header
		String[] nextLine = reader.readNext();
		nextLine = reader.readNext();
		
		while(nextLine != null)
		{
			
			SiteModel item = site_transformeCDCFromCsvLine(nextLine);
			retour.add(item);
			logger.debug("site "+item);
			nextLine = reader.readNext();
		}
		reader.close();
		return retour;
	}
	
	private SiteModel site_transformeCDCFromCsvLine(String[] items)
	{
		//idenfiant new;NAF;Naf Niveau 5;Date de debut des donnees;Fin de donnees;;;;;
//		private String id;
//		private String naf;
//		private String label;
//		private String beginDate;
//		private String endDate;
		
		SiteModel retour = new SiteModel();
		retour.setId(items[0]);
		retour.setNaf(items[1]);
		retour.setLabel(items[2]);
		retour.setBeginDate(items[3]);
		retour.setEndDate(items[4]);
		return retour;
	}
}
